import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import { Toast } from 'vant'
import router from '@/router'

// 导入保存token和获取token的工具
import { getToken, setToken, removeToken } from '@/utils/auth'
// 导入接口
import { userInfoAPI } from '@/api/user'

export default new Vuex.Store({
  state: {
    // 取本地存储，本地存储没有就给空对象
    tokenObj: getToken() || {},
    userInfo: {}
  },

  mutations: {
    // 提供一个用来修改state的mutations方法
    setToken(state, obj) {
      // 保存到vuex
      state.tokenObj = obj
      // 保存到本地存储
      setToken(obj)
    },

    // 如果要调用vuex里的setToken，需要 store.commit('setToken')
    // setToken直接调用，就知道肯定不是调用vuex里的setToken，而是调用你导入的setToken


    // 提供一个专门用来修改用户信息的方法
    setUserInfo(state, obj) {

      state.userInfo = obj
    },

    // 退出的方法
    logout (state) {

      // 清空vuex里的token
      state.tokenObj = {}
      // 本地存储也要清空
      removeToken()
      // 把用户信息也要清空
      state.userInfo = {}
      // 提示退出成功
      Toast('退出成功！')
      // 跳转到登录页
      router.push('/login')
    }
  },
  actions: {

    // 用来请求获取到用户信息
    async reqUserInfo({ commit, state }) {
      // 没数据才会去发请求
      if (!state.userInfo.name) {
        try {
          // 发请求获取当前登录的用户信息
          const res = await userInfoAPI();
          // 把获取到用户信息就可以存到vuex里面
          commit('setUserInfo', res.data)
        } catch { }
      }
    }
  }
})
